#include <stdlib.h>

#ifndef MYLISTSOK
#define MYLISTSOK

// typedef void * mo_list_iter;
typedef struct mo_list_iter {
    struct MyNode *var;
    int size;
} mo_list_iter;

typedef struct MyNode{
    void *value;
    struct MyNode *next;
} MyNode;

typedef struct MyList{
    struct MyNode *head;
    // MyNode *start;
    // MyNode *end;
    int size;
} MyList;

// extern MyNode *mo_mynode_new();
// extern void mo_mynode_delete(MyNode *tn);
extern MyList *mo_mylist_new(int t_size);
extern MyList *mo_mylist_new_fromlist(MyList *tl);
extern void mo_mylist_delete(MyList *tl);
extern void mo_mylist_add_tail(MyList *tl,void *cum);
extern void mo_mylist_add_head(MyList *tl,void *cum);
extern mo_list_iter mo_mylist_start(MyList *tl);
extern void mo_mylist_iter_next(mo_list_iter *iter);
extern void mo_get_iter_var(void *getter,mo_list_iter iter);


#endif